/**
 * 图片工具函数
 */

// 后端API基础URL
const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000'

// 调试日志
console.log('API_BASE_URL:', API_BASE_URL)
console.log('NEXT_PUBLIC_API_URL:', process.env.NEXT_PUBLIC_API_URL)

/**
 * 检查URL是否需要代理
 * @param url 图片URL
 * @returns 是否需要代理
 */
export function needsProxy(url: string): boolean {
  if (!url) return false
  
  // 需要代理的域名列表
  const proxyDomains = [
    'trae-api-us.mchost.guru',
    // 可以添加其他需要代理的域名
  ]
  
  return proxyDomains.some(domain => url.includes(domain))
}

/**
 * 获取代理后的图片URL
 * @param originalUrl 原始图片URL
 * @returns 代理后的URL或原始URL
 */
export function getProxiedImageUrl(originalUrl: string): string {
  if (!originalUrl) return ''
  
  // 如果是本地图片或不需要代理，直接返回
  if (originalUrl.startsWith('/') || !needsProxy(originalUrl)) {
    return originalUrl
  }
  
  // 对于Trae API，使用专门的端点
  if (originalUrl.includes('trae-api-us.mchost.guru') && originalUrl.includes('/text_to_image')) {
    try {
      const url = new URL(originalUrl)
      const prompt = url.searchParams.get('prompt') || ''
      const imageSize = url.searchParams.get('image_size') || 'landscape_4_3'
      
      console.log('Processing Trae API URL:', originalUrl)
      console.log('Extracted prompt:', prompt)
      console.log('Extracted image_size:', imageSize)
      
      const proxiedUrl = `${API_BASE_URL}/api/v1/image/trae-image?prompt=${encodeURIComponent(prompt)}&image_size=${imageSize}`
      console.log('Generated proxied URL:', proxiedUrl)
      
      return proxiedUrl
    } catch (error) {
      console.error('Failed to parse Trae API URL:', error)
      // 降级到通用代理
      return `${API_BASE_URL}/api/v1/image/proxy?url=${encodeURIComponent(originalUrl)}`
    }
  }
  
  // 使用通用代理
  return `${API_BASE_URL}/api/v1/image/proxy?url=${encodeURIComponent(originalUrl)}`
}

/**
 * 获取图片URL，优先使用代理
 * @param imageUrl 图片URL
 * @param bannerImageUrl 横幅图片URL
 * @param defaultUrl 默认图片URL
 * @returns 最终的图片URL
 */
export function getImageUrl(
  imageUrl?: string,
  bannerImageUrl?: string,
  defaultUrl: string = '/default-competition.svg'
): string {
  console.log('\n=== getImageUrl called ===')
  console.log('imageUrl:', imageUrl)
  console.log('bannerImageUrl:', bannerImageUrl)
  console.log('defaultUrl:', defaultUrl)
  
  // 优先使用image，然后banner_image，最后默认图片
  const originalUrl = imageUrl || bannerImageUrl
  console.log('originalUrl:', originalUrl)
  
  if (!originalUrl) {
    console.log('No original URL, returning default:', defaultUrl)
    return defaultUrl
  }
  
  // 如果需要代理，返回代理URL
  const needsProxyResult = needsProxy(originalUrl)
  console.log('needsProxy result:', needsProxyResult)
  
  if (needsProxyResult) {
    const proxiedUrl = getProxiedImageUrl(originalUrl)
    console.log('Returning proxied URL:', proxiedUrl)
    console.log('========================\n')
    return proxiedUrl
  }
  
  console.log('Returning original URL:', originalUrl)
  console.log('========================\n')
  return originalUrl
}

/**
 * 测试图片URL是否可访问
 * @param url 图片URL
 * @returns Promise<boolean>
 */
export async function testImageUrl(url: string): Promise<boolean> {
  try {
    // 使用Image对象测试图片可访问性，避免HEAD请求问题
    return new Promise((resolve) => {
      const img = new Image()
      img.onload = () => resolve(true)
      img.onerror = () => resolve(false)
      img.src = url
      
      // 设置超时，避免长时间等待
      setTimeout(() => resolve(false), 10000)
    })
  } catch {
    return false
  }
}

/**
 * 预加载图片
 * @param url 图片URL
 * @returns Promise<boolean>
 */
export function preloadImage(url: string): Promise<boolean> {
  return new Promise((resolve) => {
    const img = new Image()
    img.onload = () => resolve(true)
    img.onerror = () => resolve(false)
    img.src = url
  })
}